package com.lcc.forum.demos.web.interceptor;

import com.lcc.forum.demos.web.config.AppConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 登录拦截器
 */
@Component//利用spring进行对象管理
//需要实现接口HandlerInterceptor，该接口里面包含许多时间点的拦截
public class LoginInterceptor implements HandlerInterceptor {
    //将配置文件定义的固定跳转页面进行注入
    @Value("${bit-forum.login.url}")
    private String defaultURL;
    /**
     * @return true:继续流程 </br> false:流程中断
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取session对象
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute(AppConfig.USER_SESSION) != null){
            //用户为已登录状态，校验通过
            //返回true，继续流程
            return true;
        }
        //用户未登录，需要跳转到登录页面
        //为了降低登录固定页面的耦合性，将目标页面放到配置文件中
        //校验URL是否正确
        if (!defaultURL.startsWith("/")){
            defaultURL = "/" + defaultURL;
        }
        response.sendRedirect(defaultURL);
        //流程中断
        return false;
    }
}
